bitkeeper revision 1.1323.1.1 (426520de5_4ELPPMz4K8LGEZrgN-Hg)
authoriap10@freefall.cl.cam.ac.uk <iap10@freefall.cl.cam.ac.uk>
Tue, 19 Apr 2005 15:16:46 +0000 (15:16 +0000)
committeriap10@freefall.cl.cam.ac.uk <iap10@freefall.cl.cam.ac.uk>
Tue, 19 Apr 2005 15:16:46 +0000 (15:16 +0000)
Implement save/restore (not migration) for unstable.
Signed-off-by: ian.pratt@cl.cam.ac.uk
linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c
linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c

index 715f5dc951de5b0648b6655cb06f8928ae7ce108..36b4951b15ac2f7cb7933c14754b54b0dcfb25c4 100644 (file)
@@ -319,7 +319,8 @@ static int grant_write(struct file *file, const char __user *buffer,
     return -ENOSYS;
 }
 
-static int __init gnttab_init(void)
+
+int gnttab_resume(void)
 {
     gnttab_setup_table_t setup;
     unsigned long        frames[NR_GRANT_FRAMES];
@@ -341,6 +342,21 @@ static int __init gnttab_init(void)
 
     for ( i = 0; i < NR_GRANT_ENTRIES; i++ )
         gnttab_free_list[i] = i + 1;
+    
+    return 0;
+}
+
+int gnttab_suspend(void)
+{
+    int i;
+    for ( i = 0; i < NR_GRANT_FRAMES; i++ )
+       clear_fixmap(FIX_GNTTAB_END - i);
+    return 0;
+}
+
+static int __init gnttab_init(void)
+{
+    BUG_ON(gnttab_resume());
 
     /*
      *  /proc/xen/grant : used by libxc to access grant tables
index f544ce4e9654918ddaf86441899f1d005f14badb..31b33671d5dbbae2742c94b507c0dffb23c5a7da 100644 (file)
@@ -84,6 +84,9 @@ static void __do_suspend(void)
 #define usbif_resume() do{}while(0)
 #endif
 
+    extern int gnttab_suspend(void);
+    extern int gnttab_resume(void);
+
     extern void time_suspend(void);
     extern void time_resume(void);
     extern unsigned long max_pfn;
@@ -107,6 +110,8 @@ static void __do_suspend(void)
 
     irq_suspend();
 
+    gnttab_suspend();
+
     HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
     clear_fixmap(FIX_SHARED_INFO);
 
@@ -138,6 +143,7 @@ static void __do_suspend(void)
     HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list =
         virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT;
 
+    gnttab_resume();
 
     irq_resume();